// ==UserScript==
// @name          学习辅助脚本
// @version       0.0.7
// @description   阿力阿狸！
// @author        mukes
// @include       *://mooc1.chaoxing.com*
// @include       *://i.chaoxing.com*
// @include       *://mooc2-ans.chaoxing.com*
// @grant         none
// ==/UserScript==


(function() {
    'use strict';  // 安全语法

    function localStorageset(bool=false, data=null) {
    // 永久储存操作函数
        if (bool) {
            // 写函数
            document.cookie = `tier=${data}; max-age=86400; path=/`;
            return 0;
        } else {
            // 读函数
            return document.cookie.split('; ')
                .find(row => row.startsWith('tier' + '='))
                ?.split('=')[1] ?? null;
        }
    }

    function extractTaskPoints(text) {
    // 使用正则表达式匹配 "数字/数字" 格式
        const regex = /(\d+)\/(\d+)/;
        const match = text.match(regex);

        if (match) {
            // 将匹配到的字符串转换为数字
            const completed = parseInt(match[1]);
            const total = parseInt(match[2]);

            return [completed, total];
        } else {
            return null;
        }
    }

    function runInIframe(Index) {
        //  选课页面主函数

        var class_list = document.getElementsByClassName('course');  // 获取class对应值
        var class_yes_list = Array.from(class_list).filter(
            tier => tier.getElementsByClassName('not-open-tip').length === 0
        );  // 筛除完成标签

        if (Index >= class_yes_list.length) {
            // 如果tier超过元素集的最大索引则退出

            console.log('程序以退出', Index >= class_yes_list.length, Index, class_yes_list.length)
            return false
        }

        class_yes_list[Index].querySelector('.course-name').click();  // 点击课程
    }

    function ChooseClass() {
        // 选择章节

        var class_list = document.getElementsByClassName('xs_head_name');
        var text = class_list[0].innerText;
        var tier = extractTaskPoints(text);
        if (tier[0] === tier [1] & !document.querySelector('#fanyaChapter > div > div.chapter_body.xs_table > div.nodata > p')) {
            // 该课程以完成
                parent.postMessage({
                    type: 'class_off', // 一个标识符，方便主程序区分消息类型
                    data: 'off'               // 你要传递的实际数据
                }, '*');

        } else if (tier[0] === 0 && tier[1] === 0) {
            parent.postMessage({
                type: 'class_off', // 一个标识符，方便主程序区分消息类型
                data: 'off',               // 你要传递的实际数据
            }, '*');
        }
        else if (document.getElementsByClassName("chapter_unit")) {
            // 课程未完成
            const targetElement = document.querySelector('.chapter_unit span.catalog_sbar').click();
        }
    }

    function iFrameDetection() {
        // 监听页面iframe并定位
        return Array.from(document.querySelectorAll('iframe')).find(iframe => {
            try {
                // 检查 iframe 是否已加载且可访问
                const src = iframe.src;
                return src.includes('mooc1-1.chaoxing.com') ||
                       src.includes('mooc2-ans.chaoxing.com') ||
                       src.includes('mooc1.chaoxing.com');
            } catch (e) {
                console.log(e)
                return false; // 跨域无法访问
            }
        });
    }

    function PostMessage(event) {
        // 监听iframe传回消息

        if (event.data.type === 'class_off') {
            // 课程已完成，跳过此课程
            window.location.replace(`https://i.chaoxing.com/base?t=${Date.now()}&tier=1`);  // 返回登录页面并声明tier减一
        }
    }

    function main() {
        // 主函数

        const url = window.location.href;  // 获取当前页面路径
        if (url.includes('i.chaoxing.com/base')) {
            // 选择课程页面

            var tier = localStorageset()  // 获取cookice值

            if (new URLSearchParams(window.location.search).get('tier')) {
                localStorageset(true, Number(localStorageset()) + 1);
                tier = Number(tier) + 1
            }  else if (tier === null) {
                tier = 0;  // 重定向索引值
                localStorageset(true, 0);  // 写入新索引
            }

            const script = document.createElement('script');  // 获取script脚本插入点
            script.textContent = `
                ${localStorageset.toString()}
                ${runInIframe.toString()}
                runInIframe(${tier});
            `;  // 嵌入式插件
            iFrameDetection().contentWindow.document.body.appendChild(script);  // 脚本嵌入

            // window.close()
        } else if (url.includes('mooc2-ans.chaoxing.com/mooc2-ans/mycourse/stu')) {
            // 选择章节页面

            var navContent = document.getElementsByClassName('nav-content')[0];  // 定位元素
            navContent.querySelector('li[dataname="zj"]').querySelector('a').click();  // 定位检查标签
            setTimeout(function() {
                const script = document.createElement('script');  // 获取script脚本插入点
                script.textContent = `
                    ${extractTaskPoints.toString()}
                    ${ChooseClass.toString()}
                    ChooseClass();
                `;
                iFrameDetection().contentWindow.document.body.appendChild(script);  // 脚本嵌入
                window.addEventListener('message', PostMessage);

            }, 5000);  // 等待页面响应后写入

        } else if (url.includes('mooc1.chaoxing.com/mycourse/studentstudy')) {
            // 课程页面

            function checkCourseStatus() {
                if (!document.querySelector('span.orangeNew')) {
                    console.log("课程结束");
                    document.getElementById('contentFocus').click();
                } else {
                    console.log("课程仍在进行中，继续检查...");
                    // 如果条件不满足，10秒后再次检查
                    setTimeout(checkCourseStatus, 10000);
                }
            }

            checkCourseStatus();
        }
    }


    setTimeout(function() {
        if (window.self === window.top) {
            console.log('当前为顶层页面，准备注入到 iframe...');
            main();
        }
    }, 5000);  // 等待页面dom加载完毕

})
()